#include <map>
#include <iostream>
#include <string>
#include <stdlib.h>
#include "comando.h"
#ifndef CMDOUT_H
#define CMDOUT_H
using namespace std;
class Cmd_Out : public Comando {
	private:
		bool e_variavel;
		string output;
		string input;
	public:
		Cmd_Out(map<string,string> *memoria, int pc, string input, bool e_variavel) : Comando (memoria, pc) {
			this->input = input;
			this->output = input;
			this->e_variavel = e_variavel;
		}	
		
		virtual int executar() {
			if (e_variavel) { //se for variavel, variavel = input e input vira o valor da memoria
				string variavel=input;
				if (variavel.find('[') != -1) { //verifica se é um array ou não
					string vArray=variavel.substr((variavel.find('[')+1), (variavel.find(']')-variavel.find('[')-1));
					bool digito=true;
					for (int i=0; i<vArray.size(); i++)
						if (!isdigit(vArray[i]))
							digito=false;
					if (digito) {
						int index = stoi(vArray);
						output=memoria->find(variavel.substr(0, variavel.find('[')))->second;
						output=output[index];
					}
					else {
						string str=memoria->find(vArray)->second;
						int index=stoi(str);
						output=memoria->find(variavel.substr(0, variavel.find('[')))->second;
						output=output[index];
					}
				}
			
				else 
					output=memoria->find(variavel)->second;
			}
			cout<<output;
			return pc;
		}
};	

#endif
